#include "recbox.h"
#include "ui_recbox.h"

#include<recboxitem.h>
#include<QJsonObject>

RecBox::RecBox(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBox)

    ,row(1)//构造函数中 默认是1行4列 这里4列是想要的 1行无所谓只是需要初始化
    ,col(4)//
{
    ui->setupUi(this);

    //RecBoxItem* item = new RecBoxItem(); 只是测试
    //ui->recListUpHLayout->addWidget(item);

}

RecBox::~RecBox()
{
    delete ui;
}

void RecBox::initRecBoxUi(QJsonArray data, int row) //recBox拿到QQMusic收集到的所有recBoxItem图片和文本 和几行 来决定往up还是down放

{
    if(2==row) //两行
    {
        this->row=row;
        col=8;//2行时把列设为8  ???  是为了creatRecBoxItem()中放两行
    }
    else      //一行
    {
        ui->recListDown->hide();
    }

    imageList = data; //用来接收qqmuic传过来的recBoxItem(收集到的所有recBoxItem图片和文本)


    //开始分组
    currentIndex = 0; //默认显示第0组
    count = imageList.size() / col;   //每行图片总数

    //在RecaBox控件中添加RecBoxItem 的封装方法为:  QQMusic中要调用
    creatRecBoxItem();
}


void RecBox::creatRecBoxItem()//创建一页的recBoxItem
{
    //要先删除RecBox内部之前的元素(点击上/下一页时)
    QList<RecBoxItem*> recUpList = ui->recListUp->findChildren<RecBoxItem*>(); //先找所有的RecBoxItem 放在QList<RecBoxItem*>中
    for(auto e:recUpList) //再在recListUpHLayout中用范围for一个一个remove
    {
        ui->recListUpHLayout->removeWidget(e);//remove只是把控件中的RecBoxItem删除了 但是RecBoxItem* item = new RecBoxItem()的对象还在
        delete e;// 所以需要delete
    }
    QList<RecBoxItem*> recDownList = ui->recListDown->findChildren<RecBoxItem*>();
    for(auto e:recDownList)
    {
        ui->recListDownHLayout->removeWidget(e);
        delete e;
    }

    //创建RecBoxItem对象 再添加往RecBox中
    //今日推荐   上 row=1 col=4 由条件判断后始终走的else：只有一行 添加4个
    //音乐补给站 下  row=2 col=8
    int index  = 0; //只是一个temp 代替下表i的作用 每次循环完要++
    for(int i = currentIndex * col ; i < col + currentIndex * col  ; ++i)//for(int i=0 ; i<col ; ++i)这样永远都是从i=0第一个照片开始
    {
        RecBoxItem* item = new RecBoxItem();

        //设置音乐图片和对应文本
        QJsonObject obj =  imageList[i].toObject();
        item->setRecText(obj.value("text").toString());
        item->setRecImage(obj.value("path").toString());

        if(index >= col/2 && row==2)// if(i >= col/2 && row==2)
        {
            //ui->recListUpHLayout->addWidget(item);
            ui->recListDownHLayout->addWidget(item);
        }
        else
        {
            ui->recListUpHLayout->addWidget(item);
        }
        index++;

        //json的值 其本质是 QJsonValue 类型，但 QJsonValue 内部存储的是 QJsonObject。
        //更准确的表述imageList[i] 的直接类型是 QJsonValue（会被隐式转换成 QJsonValue）。
        //但由于填充时存入的是 QJsonObject 会被隐式转换成 QJsonValue
    }
}

void RecBox::on_btDown_clicked()
{
    //点击之后显示下一组图片 若已经是最后一组 则显示第0组
    currentIndex++;
    if(currentIndex >= count)
    {
        currentIndex = 0;
    }
    creatRecBoxItem();
}

void RecBox::on_btUp_clicked()
{
    //点击之后显示上一组图片 若已经是第0组 则显示最后一组
    currentIndex--;
    if(currentIndex < 0)
    {
        currentIndex = count - 1;
    }
    creatRecBoxItem();
}
